package com.zoe.im.controller;

import com.zoe.im.entity.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.bind.annotation.RestController;

import java.security.Principal;

/**
 * @author Zoe.Zhang
 * @date 2021/10/31
 * @description
 */
@RestController
public class MessageController {

    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;

    // 前台给后台发送消息的接口地址,如果定义了消息前缀,则前台需要加上消息前缀 "/app/hello"
    // setApplicationDestinationPrefixes("/app")
    // springboot + SpringSecurity 点对点发送消息必须要用 根据用户名来发送消息
    @MessageMapping("/onlineChat/{username}")
    // @DestinationVariable 参考PathVariable注解使用
    public void chat(@DestinationVariable("username") String username, Principal principal, Message message) {
        String formSb = principal.getName();
        System.out.println(formSb + "消息发送给：  " + username);

        message.setFromSb(formSb);
        // org0: 表示要发送给谁
        // org1: 表示前台监听的地址,注意前台监听的地址前面还需要加上一个/user,也就是说前台监听的地址是/user/queue/chat;
        // org2: 消息内容
        simpMessagingTemplate.convertAndSendToUser(message.getSendToSb(), "/queue/chat", message);
    }
}
